package gui

import javax.imageio.ImageIO
import javax.swing.ImageIcon
import javax.swing.JButton
import javax.swing.JToolBar
import scala.swing.Action
import scala.swing.Button
import scala.swing.Component
import scala.swing.SequentialContainer
import scala.swing.event.MouseEntered
import scala.swing.event.MouseExited

/**
 * Diese Klasse stellt die Funktionalitaet einer
 * Toolbar zur Verfuegung. Dazu wrapped es die
 * im java.swing-Paket bereits vorhandene JToolBar-
 * Klasse.
 * 
 * Die Toolbar wird mit den wichtigsten Funktionen
 * der MenuBar initialisiert und durch Icon-Buttons
 * dargestellt. Zusaetzlich gibt es Funktionen zum
 * Aktiv und Inaktiv setzen der einzelnen Buttons.
 */

class ToolBar(iconsize: Int) extends Component with SequentialContainer.Wrapper {
  
  override lazy val peer: JToolBar = new JToolBar
  
  def addButton(button:Button) : Unit = {
    this.add(button)
  }
  
  def addButton(icon: String, actionC: Action, toolTip: String, altText: String) : Unit = {
    var imageURL = this.getClass().
                        getResource("/gui/img/toolbar/" + icon + "_" + iconsize + ".png")
    
    var button = new Button() {
      action = actionC
      tooltip = toolTip
      text = ""
      focusPainted = false
      borderPainted = false
      
      peer.setContentAreaFilled(false)
      
      listenTo(mouse.moves)
      reactions += {
        case MouseEntered(src, point, mod) => peer.setContentAreaFilled(true)
        case MouseExited(src, point, mod) => peer.setContentAreaFilled(false)
      }
    }

    if(imageURL != null) {
      button.icon = new ImageIcon(ImageIO.read(imageURL),altText)
    }
    else {
      button.text = altText
      println("Resource not found: " + icon)
    }
    add("",button)  
  }
  
  def add(comp:Component) = peer.add(comp.peer)
  def add(s:String, comp:Component) = peer.add(s,comp.peer)
  
  def addSeparator = peer.addSeparator();
  
  def enabled(i: Int, b: Boolean) : Unit = {
    var but = this.peer.getComponent(i) match {
      case x:JButton => x.setEnabled(b)
      case x:Button => x.enabled = b
      case null => 
      case _ => enabled(i+1,b)
    }
  }
  
  def visible(i: Int, b: Boolean) : Unit = {
    var but = this.peer.getComponent(i) match {
      case x:JButton => x.setVisible(b)
      case x:Button => x.visible = b
      case null => 
      case _ => visible(i+1,b)
    }
  }
  
}


 